perm filename EADD8.2[EAL,HE] blob
sn#712025 filedate 1983-05-26 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 {$NOMAIN Editor: aux routine for addStmnt: addCmon }
C00005 00003 (* addStmnt: aux routine: addCmon *)
C00008 ENDMK
C⊗;
{$NOMAIN Editor: aux routine for addStmnt: addCmon }
%include eedit.hdr;
{ Externally defined routines from elsewhere: }
(* From ALLOC *)
function newStatement: statementp; external;
(* From EAUX1A *)
function makeNVar(vartype: datatypes; vid: identp): varidefp; external;
procedure pushStmnt(s: statementp; indent: integer); external;
(* From EAUX1C *)
procedure errprnt; external;
(* From EAUX2A *)
procedure makeNewVar(newvar: varidefp); external;
(* From ETOKEN *)
procedure getToken; external;
(* From EPAR3E *)
procedure cmonParse(st: statementp; getStart: boolean); external;
(* From EAUX3C - addStmnt aux routines *)
function getEmptyStmnt(sp:statementp): statementp; external;
procedure addNSt(sty: stmntypes; nextLinep: cursorpp;
var sp: statementp; slabel: varidefp;
emptyp,stok: boolean; var nogood,flushp: boolean); external;
function addNode(nextLinep: cursorpp; slabel:varidefp): nodep; external;
procedure addNEnv; external;
(* From PP *)
procedure relLine(l: linerecp); external;
procedure ppLine; external;
procedure ppOutNow; external;
procedure ppChar(ch: ascii); external;
procedure pp5(ch: c5str; length: integer); external;
procedure pp10(ch: cstring; length: integer); external;
procedure pp10L(ch: cstring; length: integer); external;
procedure pp20(ch: c20str; length: integer); external;
procedure pp20L(ch: c20str; length: integer); external;
(* addStmnt: aux routine: addCmon *)
procedure addCmon(defer: boolean; nextLinep: cursorpp; var sp: statementp;
slabel: varidefp; emptyp,clok,stok: boolean;
var nogood,flushp: boolean); external;
procedure addCmon;
var n: nodep; v: varidefp;
begin
if not clOk then addNSt(cmtype,nextLinep,sp,slabel,emptyp,stok,nogood,flushp)
else
begin
sp := newStatement;
with sp↑ do
begin
stype := cmtype;
stlab := slabel;
exprs := nil;
if slabel <> nil then
begin
slabel↑.s := sp;
nlines := 2;
end;
end;
n := addNode(nextLinep,slabel);
with n↑ do
begin
ntype := cmonnode;
cmon := sp;
end;
curLine := cursorLine - 1;
if slabel <> nil then curline := curline - 1;
pushStmnt(sp,0);
end;
v := makeNVar(cmontype,nil);
v↑.s := sp;
with sp↑ do
begin
deferCm := defer;
oncond := nil;
conclusion := getEmptyStmnt(sp);
cdef := v;
nlines := nlines + 1;
end;
cmonParse(sp,false);
getToken;
if not endOfLine then
with curToken do
if (ttype <> reswdtype) or (rtype <> filtype) or
(filler <> dotype) then
begin
pp20L(' Need a "DO" here ',17); errPrnt;
backUp := true
end;
addNEnv; (* make up a new environment if needed *)
makeNewVar(v); (* if active block make env entry for var *)
end;